package com.manage.server.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.manage.dto.UserRoleDTO;
import com.manage.dto.add.UserRoleAddDTO;
import com.manage.dto.update.UserRoleUpdateDTO;
import com.manage.entity.UserRole;
import com.manage.result.PageResult;
import com.manage.server.mapper.UserRoleMapper;
import com.manage.server.service.UserRoleService;
import com.manage.vo.UserRoleVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

/**
 * @description 针对表【user_role(用户表_身份表)】的数据库操作Service实现
 */
@Service
public class UserRoleServiceImpl extends ServiceImpl<UserRoleMapper, UserRole> implements UserRoleService {

    @Override
    public boolean save(UserRoleAddDTO userRoleAddDTO) {
        UserRole userRole = new UserRole();
        BeanUtils.copyProperties(userRoleAddDTO, userRole);
        return this.save(userRole);
    }

    @Override
    public boolean updateById(UserRoleUpdateDTO userRoleUpdateDTO) {
        UserRole userRole = new UserRole();
        BeanUtils.copyProperties(userRoleUpdateDTO, userRole);
        return super.updateById(userRole);
    }

    @Override
    public PageResult<UserRoleVO> findUserRoleByPage(UserRoleDTO dto) {
        // 1. 处理分页参数（严格保持参数校验逻辑）
        int pageNum = dto.getPageNum() != null && dto.getPageNum() > 0 ? dto.getPageNum() : 1;
        int pageSize = dto.getPageSize() != null && dto.getPageSize() > 0 ? dto.getPageSize() : 10;

        // 2. 创建分页对象（严格保持参数顺序）
        Page<UserRole> page = new Page<>(pageNum, pageSize);

        // 3. 构建动态查询条件（严格保持条件构建方式）
        QueryWrapper<UserRole> queryWrapper = new QueryWrapper<>();

        // 精确匹配条件（严格保持字段匹配规则）
        if (dto.getId() != null) {
            queryWrapper.eq("id", dto.getId());
        }
        if (dto.getUserId() != null) {
            queryWrapper.eq("user_id", dto.getUserId());
        }
        if (dto.getRoleId() != null) {
            queryWrapper.eq("role_id", dto.getRoleId());
        }

        // 4. 执行分页查询（严格保持查询方式）
        Page<UserRole> resultPage = this.page(page, queryWrapper);

        // 5. 转换Entity到VO（严格保持转换逻辑）
        Page<UserRoleVO> voPage = (Page<UserRoleVO>) resultPage.convert(entity -> {
            UserRoleVO vo = new UserRoleVO();
            BeanUtils.copyProperties(entity, vo);
            // 严格保持字段转换注释格式
            // vo.setXXX(entity.getXXX());
            return vo;
        });

        // 6. 返回分页结果（严格保持返回格式）
        return PageResult.success(voPage);
    }
}